package com.tedu.api.ee;

import org.junit.Test;

import java.io.*;

/**
 * Java有一套完善异常处理操作：
 * 程序中对应出现什么问题，就会有对应异常【对象】提供出来，错误也是对象！
 *
 * Throwable顶级超类--抛出错误：
 *    子类：Exception对象：程序级别的错误(经常遇见)
 *                       编译期--FileOutputStream(编写代码同时，下方波浪线)
 *                       处理方式①：抛出异常：不管什么错误，抛出方法外
 *                              ②：捕获异常：抓到异常，记录异常错误信息
 *                       检查异常：通常由编译器检查出来，存在异常类，抛出、捕获！
 *                       运行期--控制台(IDE开发工具控制台，显示出红色，异常类名字)
 *                       非检查异常：RuntimeException(认为所有异常来自于RuntimeException)
 *                                 所有异常都是RuntimeException的子类！
 *    子类：Error对象:描述系统级别的错误(不常见)
 *        ----测试：程序挂了？    利用字符串不断拼接--Error
 *        String str="字符串";   直接量写出字符串   ---存常量池
 */
public class EE {
    /**
     * Error错误---递归方式栈溢出
     * 1.创建静态方法method
     * 2.在静态方法中调用method
     * 3.通用testError单元测试---调用EE对象下的method方法
     */
    public static void method(){
        method();
    }
  @Test
    public void testError() {
    EE.method();

  }

  //Exception    检查异常   ----处理手段2：捕获方式----预判：程序出什么异常
 @Test
 public void testException(){
 String s="a";
 //StringIndexOutOfBoundsException异常--产生原因：字符串下标越界异常
 // 异常产生原因：指定下标超出字符串范围！
 //s.charAt(0);


     //NullPointerException异常----空指针异常
     //异常产生原因：字符串为空，拿到数据值为空时
     //s.length();



  //NumberFormatException异常----数值转换异常
  //异常产生原因：将存储的不是整数的字符串，转换为整数！
  Integer.parseInt(s);//a  是整数类型


    }

}